wayland: Add internal gdk_wayland_seat_set_global_cursor()
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 13 Jan 2016 19:57:47 +0000 (20:57 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 19 Jan 2016 13:17:36 +0000 (14:17 +0100)
This can be used for cases (like DnD) where there isn't necessarily
a grab, but we want a global pointer cursor.

gdk/wayland/gdkdevice-wayland.c
gdk/wayland/gdkprivate-wayland.h

index 1afb9b001d954dd05c8becc6af5d3ee8b3e3d77c..43a86906a96e47b49e8926bf70958f8a96446ab2 100644 (file)
@@ -306,7 +306,7 @@ gdk_wayland_device_set_window_cursor (GdkDevice *device,
   if (device == wd->touch_master)
     return;
 
-  if (wd->pointer_grab_window)
+  if (wd->grab_cursor)
     cursor = wd->grab_cursor;
 
   /* Setting the cursor to NULL means that we should use
@@ -2685,7 +2685,7 @@ gdk_wayland_seat_grab (GdkSeat                *seat,
                                     evtime,
                                     FALSE);
 
-      g_set_object (&wayland_seat->grab_cursor, cursor);
+      gdk_wayland_seat_set_global_cursor (seat, cursor);
       g_set_object (&wayland_seat->cursor, cursor);
       gdk_wayland_device_update_window_cursor (wayland_seat);
     }
@@ -3066,6 +3066,21 @@ gdk_wayland_device_unset_touch_grab (GdkDevice        *gdk_device,
   _gdk_wayland_display_deliver_event (device->display, event);
 }
 
+void
+gdk_wayland_seat_set_global_cursor (GdkSeat   *seat,
+                                    GdkCursor *cursor)
+{
+  GdkWaylandSeat *wayland_seat = GDK_WAYLAND_SEAT (seat);
+  GdkDevice *pointer;
+
+  pointer = gdk_seat_get_pointer (seat);
+
+  g_set_object (&wayland_seat->grab_cursor, cursor);
+  gdk_wayland_device_set_window_cursor (pointer,
+                                        gdk_wayland_device_get_focus (pointer),
+                                        NULL);
+}
+
 struct wl_data_device *
 gdk_wayland_device_get_data_device (GdkDevice *gdk_device)
 {
index cb8a66a3af03fdd5c55a9e5a6a27ae4e65b7e959..23125cbf055f59005473d7659643e077ed5365ad 100644 (file)
@@ -264,4 +264,7 @@ EGLSurface gdk_wayland_window_get_egl_surface (GdkWindow *window,
 EGLSurface gdk_wayland_window_get_dummy_egl_surface (GdkWindow *window,
                                                     EGLConfig config);
 
+void gdk_wayland_seat_set_global_cursor (GdkSeat   *seat,
+                                         GdkCursor *cursor);
+
 #endif /* __GDK_PRIVATE_WAYLAND_H__ */